package com.jiangnan.util

import android.content.Context
import com.google.android.material.dialog.MaterialAlertDialogBuilder

/**
 * 显示一个企业级的确认对话框
 *
 * @param context       调用处的 Context（Activity 或 Fragment.requireContext()）
 * @param title         对话框标题，突出本次操作
 * @param message       具体提示文案，说明执行操作的后果或要求
 * @param iconRes       可选：一个图标资源 ID，帮助用户快速识别主题
 * @param positiveText  确认按钮文字，标明“执行”含义
 * @param negativeText  取消按钮文字，标明“放弃”含义
 * @param onConfirm     点击确认时的回调
 * @param onCancel      点击取消时的回调（可不传，则仅关闭对话框）
 */
fun showConfirmationDialog(
  context: Context,
  title: String,
  message: String,
  iconRes: Int? = null,
  positiveText: String = "确定",
  negativeText: String = "取消",
  onConfirm: () -> Unit,
  onCancel: (() -> Unit)? = null
) {
  MaterialAlertDialogBuilder(context, com.google.android.material.R.style.ThemeOverlay_MaterialComponents_MaterialAlertDialog)
    // 设置对话框左上角的可选图标
    .apply { iconRes?.let { setIcon(it) } }
    // 对话框的标题，一般简短、醒目
    .setTitle(title)
    // 对话框的主要内容文案，说明为什么要操作、会有什么后果
    .setMessage(message)
    // “取消”按钮，通常放左侧（在 RTL 下自动适配）
    .setNegativeButton(negativeText) { dialog, _ ->
      onCancel?.invoke()
      dialog.dismiss()
    }
    // “确定”按钮，通常放右侧，执行 onConfirm 回调
    .setPositiveButton(positiveText) { dialog, _ ->
      onConfirm()
      dialog.dismiss()
    }
    // 不允许点击空白处或返回键关闭对话框，避免误触
    .setCancelable(false)
    .show()
}
